# 给定一个数字n 如何快速判断是2的幂次方


"""
给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
有效字符串需满足：
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

示例 1：
输入：s = "()"
输出：true

示例 2：
输入：s = "()[]{}"
输出：true

示例 3：
输入：s = "(]"
输出：false

示例 4：
输入：s = "([])"
输出：true

提示：
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
"""



def solution(s) -> bool:
    _map = {
        "{": "}",
        "(": ")",
        "[": "]"
    }
    stack = [] # 右括号
    for str1 in s:
        if str1 in _map:# 左括号
            stack.append(_map[str1])
        elif stack and stack[-1] == str1:
            stack.pop()
        else:
            return False

    # 判断栈是否还有值
    return not bool(stack)



input_str = "([])"

print(solution(input_str)) # ture
print(solution("(]")) # false
print(solution("()[]{}")) # ture
